package com.wyvoid.forum.service;


import java.util.Map;

import com.wyvoid.forum.domain.Poll;
import com.wyvoid.forum.domain.Post;
import com.wyvoid.forum.domain.Topic;
import com.wyvoid.forum.web.search.SearchBean;
import com.wyvoid.core.persistent.Pagination;
import com.wyvoid.core.persistent.hibernate.HibernatePage;
import org.springframework.transaction.annotation.Transactional;


/**
 * 主题模块业务处理接口
 * 
 * @author 51void
 * @link www.51void.com
 */
@Transactional
public interface ITopicService {
	
	/**
	 * 创建主题
	 * <ol>
	 * <li>创建主题</li>
	 * <li>创建第一条帖子信息</li>
	 * </ol>
	 * 
	 * @param topic 主题信息
	 * @param firstPost 第一条帖子信息 
	 */
	public void createTopic(Topic topic,Post firstPost,Poll poll) ;
	
	/**
	 * 修改主题
	 * @param topic 主题信息
	 * @param firstPost 第一条帖子信息 
	 */
	public void editTopic(Topic topic,Post firstPost) ;

	
	/**
	 * 删除主题,将主题丢到垃圾箱(逻辑删除)
	 * @param topicId
	 * @
	 */
	public void trashTopic(long topicId)  ;

	
	/**
	 * 查看论坛贴子
	 * <ol>
	 * <li>更新贴子浏览次数</li>
	 * <li>列表主题对应的全部贴子</li>
	 * </ol>
	 * 
	 * @param topicId 贴子编号
	 * @param pagination 分页对象
	 * @return HibernatePage 论坛贴子列表
	 * @
	 */
	public HibernatePage viewTopic(long topicId, Pagination pagination) ;
	
	/**
	 * 取得制定论坛的贴子
	 * 
	 * @param forumId 论坛编号
	 * @param orderMap 排序数组
	 * @param pagination 分页对象
	 * @return HibernatePage 论坛贴子列表
	 * @
	 */
	public HibernatePage<Topic> getTopics(long forumId, Map orderMap,Pagination pagination) ;
	
	/**
	 * 根据贴子状态列表贴子
	 * 
	 * @param forumId 论坛编号
	 * @param categoryId 类别编号 (-1,表示不设定CategoryId)
	 * @param orderMap 排序数组
	 * @param status 贴子状态 (1 精华, 2 锁定)
	 * @param pagination 分页对象
	 * @return HibernatePage 帖子集合
	 * @
	 */
	public HibernatePage getTopics(long forumId ,long categoryId, Map orderMap, int status, Pagination pagination) ;

	/**
	 * 帖子检索 
	 * @param forumId 论坛编号
	 * @param type 检索类型
	 * @param time 时间段
	 * @param way 时间方向
	 * @param orderMap 排序信息
	 * @param pagination 分页
	 * @return
	 * @
	 */
	public HibernatePage searchTopics(long forumId, String type, String keyword, int time, String way, Map orderMap, Pagination pagination) ;


	/**
	 * 移动主题
	 *
	 * @param ids 主题列表
	 * @param oldForumId 主题原来所在的论坛
	 * @param newForumId 主题所在新的论坛
	 */
	public void moveTopic(long[] ids,long oldForumId,long newForumId) ;
	
	/**
	 * 更新主题是否被置顶
	 *
	 * @param topicId 主题编号
	 * @param isTop 是否被置顶
	 * isTop 1 置顶，0 主题状态正常
	 */
	public void updateTopicIsTop(long topicId,int isTop) ;

	/**
	 * 取得主题总数
	 * @return
	 * @
	 */
	public long countTopic() ;


    Topic getTopic(long topicId);

    void updateTopic(Topic topic);

    Topic getNextTopic(long tid);

    Topic getLastTopic(long tid);

    void deleteTopic(long tid);

    void digestTopic(long tid);

    void stickTopic(long tid);

    HibernatePage<Topic> searchTopics(SearchBean searchBean, Pagination pagination);

    HibernatePage<Topic> searchTopics2(SearchBean searchBean, Pagination pagination);
}
